package com.wei800.common.util;

import jakarta.servlet.http.HttpServletRequest;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

public class PageUtil { // 分页控制处理操作
    private Integer currentPage = 1; // 默认的首页页码
    private Integer lineSize = 2; // 每页显示2条记录
    private String column; // 模糊查询列
    private String keyword; // 模糊查询关键字
    private String columnData; // 模糊查询候选列
    // 分页之中所有的请求处理以及属性到页面的传递都需要此对象的支持
    private HttpServletRequest request; // 获取用户的请求数据
    private String url; // 分页的处理路径
    public PageUtil(String url) {
        this(url, null); // 不需要查询操作的支持
    }
    public PageUtil(String url, String columnData) { // 接收初始化参数
        this.url = url;
        this.columnData = columnData;
        this.request = ((ServletRequestAttributes)
                RequestContextHolder.getRequestAttributes()).getRequest();
        this.splitHandler(); // 进行分页参数的处理
    }
    private void splitHandler() {
        // 所有分页参数在发送的时候都是以请求参数的形式发送过来的，所以直接接收即可
        try { // 表示当前所在的页码
            this.currentPage = Integer.parseInt(this.request.getParameter("cp"));
        } catch (Exception e) {}
        try { // 当前每页显示的行数
            this.lineSize = Integer.parseInt(this.request.getParameter("ls"));
        } catch (Exception e) {}
        // 按照正常的架构设计，此时的信息不应该通过数据库查询，而是应该通过专属的索引数据库查询
        this.column = this.request.getParameter("col"); // 模糊查询列
        this.keyword = this.request.getParameter("kw"); // 模糊查询关键字
        // 考虑到后续的页面需要进行分页数据的展示，那么要进行属性的传递
        this.request.setAttribute("currentPage", this.currentPage);
        this.request.setAttribute("lineSize", this.lineSize);
        this.request.setAttribute("column", this.column);
        this.request.setAttribute("keyword", this.keyword);
        this.request.setAttribute("url", this.url);
        this.request.setAttribute("columnData", this.columnData);
    }
    public Integer getCurrentPage() {
        return currentPage;
    }
    public Integer getLineSize() {
        return lineSize;
    }
    public String getColumn() {
        return column;
    }
    public String getKeyword() {
        return keyword;
    }
    // 此时可以根据需要定义Setter、Getter的处理方法，但是本次只定义了四个获取操作
}
